import { Random } from 'mockjs';
import moment from 'moment';
import { parse } from 'url';

const roles = ['teacher', 'student'];
// 学生所属专业
const specialities = {
  ch: '测绘专业',
  yg: '遥感专业',
  zh: '自环专业',
  cx: '城乡专业',
  dx: '地信专业',
  tg: '土管专业',
};

// 所属系
const departments = {
  ch: '测绘中心实验室',
  yg: '遥感科学与技术系',
  zh: '资源环境与城乡规划管理系',
  cx: '土地资源管理系',
  dx: '测量工程系',
  tg: '地理信息科学系',
};

const history = [];
const startTime = new Date('2019-05-30 08:00:00').getTime();
for (let i = 0; i < 1000; i += 1) {
  /**
   * key      工号
   * name     姓名
   * role     用户类型
   * date     日期
   * start    上班时间
   * end      下班时间
   * checkin  签到时间
   * signback 签退时间
   * division 部门
   * desc     备注
   */
  const obj = {
    key: Random.id(), // 教职工号 | 学号
    name: Random.cname(), // 用户姓名
    role: roles[Random.natural(0, 1)], // 用户类型 教师/学生
    division: '土管',
    // date: moment(startTime - 1000 * 60 * 60 * 24 * i).format('YYYY-MM-DD'),
    date: moment(startTime - 1000 * 60 * 60 * 24 * (i % 15)).format('YYYY-MM-DD'),
    start: '09:00',
    end: '18:00',
    checkin: `08:${Random.natural(20, 59)}`,
    signback: `18:${Random.natural(0, 59)}`,
    desc: '',
  };

  if (obj.role === 'teacher') {
    obj.division = Object.keys(departments)[Random.natural(0, 5)];
  } else {
    obj.division = Object.keys(specialities)[Random.natural(0, 5)];
  }

  history.push(obj);
}

function getMockHistory(req, res, u) {
  let url = u;
  if (!url || Object.prototype.toString.call(url) !== '[object String]') {
    // eslint-disable-next-line prefer-destructuring
    url = req.url;
  }

  const params = parse(url, true).query;
  let dataSource = history;

  // sorter
  if (params.sorter) {
    const s = params.sorter.split('_');
    dataSource = dataSource.sort((prev, next) => {
      if (s[1] === 'descend') {
        if (s[0] === 'checkin' || s[0] === 'signback') {
          return +next[s[0]].slice(3) - +prev[s[0]].slice(3);
        }

        return next[s[0]] - prev[s[0]];
      }

      if (s[0] === 'checkin' || s[0] === 'signback') {
        return +prev[s[0]].slice(3) - +next[s[0]].slice(3);
      }
      return prev[s[0]] - next[s[0]];
    });
  }

  // name search
  if (params.name) {
    dataSource = dataSource.filter(data => data.name.indexOf(params.name) > -1);
  }

  // name search
  if (params.role) {
    dataSource = dataSource.filter(data => data.role === params.role);
  }

  // division search
  if (params.department) {
    dataSource = dataSource.filter(data => data.division === params.division);
  }

  let pageSize = 10;
  if (params.pageSize) {
    pageSize = params.pageSize * 1;
  }

  const result = {
    list: dataSource,
    pagination: {
      total: dataSource.length,
      pageSize,
      current: parseInt(params.currentPage, 10) || 1,
    },
  };

  return res.json(result);
}

export default {
  'GET /api/attendance/history': getMockHistory,
};
